home *** CD-ROM | disk | FTP | other *** search
Wrap
/* *********************************************************************** InterActive Status door for DayDream BBS V1.00 By Hydra! Note that the code is not optimized to the maximum, because i wanted to make it easy to read. I think this demonstrates well enough how to use dreamdoor.library when coding doors for DayDream BBS. Sas/C 6.50 tells warnings because of those time_t things. I was unable to fix them, sorry.. *********************************************************************** */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include <proto/dddoor.h> #include <libraries/dddoor.h> #include <proto/exec.h> #include <proto/dos.h> #include <daydream.h> #include <exec/memory.h> #include <dos.h> struct Library *DDBase; struct DIFace *d; struct DDPointers *Pointers; void ClearEntry(ULONG Suuda); void UpdateEntry(ULONG updateme); void HandleCAccess(ULONG, char *); ULONG CountNodes(struct NodeStruct *); char BUFFER[2048]; int main(int argc, char *argv[]) { UWORD CurrSelect=NULL; UWORD Exit=NULL; ULONG Answer=NULL; DDBase=(struct Library *)OpenLibrary("dreamdoor.library",1); if(DDBase==NULL) { printf("Needs DreamDoor.library V1.00+ to run\n"); exit(10); } d=InitDoor(argv[1]); /* Establish link with DD */ if(d==NULL) { printf("Hey Asswipe, this program requires DayDream BBS!\n"); CloseLibrary(DDBase); exit(10); } Pointers = AllocMem(sizeof(struct DDPointers),MEMF_PUBLIC|MEMF_CLEAR); InquirePointers(d,Pointers); if (!strcmp("?",Pointers->dp_DoorParams)) { SendString(d," Selleri Statusdoor V1.0 for DayDream BBS by Hydra/Selleri!\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n Humanoid Invasion\n +358-81-5409139\n 24h \n"); } else { SendString(d," p.--------------------. .--------------------------------------------------.\n"); SendString(d,"| 1) General Info | | |\n"); SendString(d,"| 2) File Stats | | |\n"); SendString(d,"| 3) Msg Stats | | |\n"); SendString(d,"| 4) Board Info | | |\n"); SendString(d,"`--------------------' | |\n"); SendString(d," | |\n"); SendString(d," DD-Stats V1.0 By Hydra | |\n"); SendString(d," Cursor keys to select. | |\n"); SendString(d," | |\n"); SendString(d," Q => Quit | |\n"); SendString(d," | |\n"); SendString(d," | |\n"); SendString(d," | |\n"); SendString(d," | |\n"); SendString(d," | |\n"); SendString(d," | |\n"); SendString(d," | |\n"); SendString(d," | |\n"); SendString(d," `--------------------------------------------------'\n"); UpdateEntry(0); while (Exit==0) { Answer=GetKey(d,HOTKEY_CURSOR); switch (Answer) { case 0: case 'q': /* q */ case 'Q': /* Q */ case 27: Exit=1; break; case 251: /* Cursor down */ ClearEntry(CurrSelect); CurrSelect++; if (CurrSelect==4) CurrSelect=0; UpdateEntry(CurrSelect); break; case 250: /* Cursor up */ ClearEntry(CurrSelect); CurrSelect--; if (CurrSelect==-1) CurrSelect=3; UpdateEntry(CurrSelect); break; case '1': /* one */ if (CurrSelect==0) break; ClearEntry(CurrSelect); CurrSelect=0; UpdateEntry(CurrSelect); break; case '2': /* two */ if (CurrSelect==1) break; ClearEntry(CurrSelect); CurrSelect=1; UpdateEntry(CurrSelect); break; case '3': /* three */ if (CurrSelect==2) break; ClearEntry(CurrSelect); CurrSelect=2; UpdateEntry(CurrSelect); break; case '4': /* four */ if (CurrSelect==3) break; ClearEntry(CurrSelect); CurrSelect=3; UpdateEntry(CurrSelect); break; } if (Answer==0) Exit=1; } SendString(d," p"); } FreeMem(Pointers,sizeof(struct DDPointers)); CloseDoor(d); CloseLibrary(DDBase); exit(0); } void ClearEntry(ULONG clearme) { if (clearme==0) SendString(d,"H 1) General Info "); if (clearme==1) SendString(d,"H 2) File Stats "); if (clearme==2) SendString(d,"H 3) Msg Stats "); if (clearme==3) SendString(d,"H 4) Board Info "); } void UpdateEntry(ULONG updateme) { char confbuf[48]; char buffer2[48]; char clean[2]=" "; time_t callinfo; struct InfoData info; struct DayDream_User *UserOnLine; ULONG lrp; ULONG freefast; UserOnLine=Pointers->dp_CurrUser; if (updateme==0) { SendString(d,"H 1) GENERAL INFO "); sprintf(BUFFER,"7HReal Name : %-36.36s7HHandle : %-36.36s",UserOnLine->user_realname,UserOnLine->user_handle); SendString(d,BUFFER); sprintf(BUFFER,"7HLocation : %-36.36s7HOrganizat.: %-36.36s",UserOnLine->user_zipcity,UserOnLine->user_organization); SendString(d,BUFFER); sprintf(BUFFER,"7HPhone : %-36.36s7H%-48.48s",UserOnLine->user_voicephone,clean); SendString(d,BUFFER); callinfo=UserOnLine->user_firstcall+252460800; sprintf(BUFFER,"7HFirst Call : %s8H ",(ULONG)ctime((time_t)&callinfo)); SendString(d,BUFFER); callinfo=Pointers->dp_Lastcall+252460800; sprintf(BUFFER,"7HLast Call : %s8H 27H Calls : %-30d",(ULONG)ctime((time_t)&callinfo),(UWORD)UserOnLine->user_connections); SendString(d,BUFFER); sprintf(BUFFER,"27H%-48.48s27HTime Left/Limit: %4d / %4d mins 27H%-48.48s",clean,UserOnLine->user_timeremaining,UserOnLine->user_dailytimelimit,clean); SendString(d,BUFFER); sprintf(BUFFER,"27HBPS Rate : %-36d27H%-48.48s27HConf Access :%-36.36s",Pointers->dp_BpsRate,clean,clean); SendString(d,BUFFER); HandleCAccess(UserOnLine->user_conferenceacc1,confbuf); sprintf(BUFFER,"27H%-48.48s",confbuf); SendString(d,BUFFER); HandleCAccess(UserOnLine->user_conferenceacc2,confbuf); sprintf(BUFFER,"27H%-48.48s",confbuf); SendString(d,BUFFER); } if (updateme==1) { SendString(d,"H 2) FILE STATS "); if (UserOnLine->user_fileratio==0) { strcpy(confbuf,"None"); } else { sprintf(confbuf,"1:%ld",(ULONG)UserOnLine->user_fileratio); } if (UserOnLine->user_byteratio==0) { strcpy(buffer2,"None"); } else { sprintf(buffer2,"1:%ld",(ULONG)UserOnLine->user_byteratio); } sprintf(BUFFER,"7HFile Ratio: %-36s7HByte ratio: %-36s7H%-48.48s",confbuf,buffer2,clean); SendString(d,BUFFER); sprintf(confbuf,"%d files, %ld bytes",UserOnLine->user_ulfiles,UserOnLine->user_ulbytes); sprintf(buffer2,"%d files, %ld bytes",UserOnLine->user_dlfiles,UserOnLine->user_dlbytes); sprintf(BUFFER,"7HUploads : %-36s7HDownloads : %-36s7H%-48.48s",confbuf,buffer2,clean); SendString(d,BUFFER); sprintf(confbuf,"%d files, %ld bytes",UserOnLine->user_freedlfiles,UserOnLine->user_freedlbytes); sprintf(BUFFER,"7H%-48.48s7HFree dl's : %-32s 7H%-48s",clean,confbuf,clean); SendString(d,BUFFER); if (UserOnLine->user_fileratio==0) { strcpy(confbuf,"Unlimited"); } else { sprintf(confbuf,"%ld",(ULONG)(UserOnLine->user_fileratio*UserOnLine->user_ulfiles)-UserOnLine->user_dlfiles+UserOnLine->user_freedlfiles); } if (UserOnLine->user_byteratio==0) { strcpy(buffer2,"Unlimited"); } else { sprintf(buffer2,"%ld",(ULONG)(UserOnLine->user_byteratio*UserOnLine->user_ulbytes)-UserOnLine->user_dlbytes+UserOnLine->user_freedlbytes); } sprintf(BUFFER,"27HFiles left: %-36s27HBytes left: %-36s27H%-48.48s",confbuf,buffer2,clean); SendString(d,BUFFER); sprintf(confbuf,"%d files, %ld bytes",UserOnLine->user_fakedfiles,UserOnLine->user_fakedbytes); sprintf(BUFFER,"27HFakes : %-36s27H%-48.48s",confbuf,clean); SendString(d,BUFFER); getdfs(Pointers->dp_CurrentNode->ns_Currnode->MULTI_TEMPORARY,&info); sprintf(BUFFER,"27HFree space on temp directory : %11ld bytes",(info.id_NumBlocks - info.id_NumBlocksUsed)* info.id_BytesPerBlock); SendString(d,BUFFER); getdfs(Pointers->dp_CurrConf->CONF_ULPATH,&info); sprintf(BUFFER,"27HFree space on ul directory : %11ld bytes27H%-48.48s27H%-48.48s",(info.id_NumBlocks - info.id_NumBlocksUsed)* info.id_BytesPerBlock,clean,clean); SendString(d,BUFFER); } if (updateme==2) { lrp=GetLrp(d,Pointers->dp_CurrConf->CONF_NUMBER,Pointers->dp_CurrBase->MSGBASE_NUMBER); SendString(d,"H 3) MSG STATS "); sprintf(BUFFER,"7HPub msgs : %-36d7HPrv msgs : %-36d7H%-48s7HBase Information%-30s7H~~~~~~~~~~~~~~~~%-30s",UserOnLine->user_pubmessages,UserOnLine->user_pvtmessages,clean,clean,clean); SendString(d,BUFFER); sprintf(BUFFER,"7HTotal Messages : %-32d",Pointers->dp_CurrBase->MSGBASE_HIGHEST-Pointers->dp_CurrBase->MSGBASE_LOWEST); SendString(d,BUFFER); sprintf(confbuf,"%ld (%ld unread)",lrp,Pointers->dp_CurrBase->MSGBASE_HIGHEST-lrp); sprintf(BUFFER,"7H%-48s7HYour last read : %-32s7H%-48s",clean,confbuf,clean); SendString(d,BUFFER); sprintf(confbuf,"%5d / %5d",Pointers->dp_CurrBase->MSGBASE_LOWEST,Pointers->dp_CurrBase->MSGBASE_HIGHEST); sprintf(BUFFER,"27H%-48s27HLowest/Highest : %-32s27H%-48s",clean,confbuf,clean); SendString(d,BUFFER); if (Pointers->dp_CurrBase->MSGBASE_FN_TAG[0]==0) { strcpy(confbuf,"-"); } else { strcpy(confbuf,Pointers->dp_CurrBase->MSGBASE_FN_TAG); } if (Pointers->dp_CurrBase->MSGBASE_FN_ZONE==0) { strcpy(buffer2,"-"); } else { sprintf(buffer2,"%d:%d/%d.%d",Pointers->dp_CurrBase->MSGBASE_FN_ZONE,Pointers->dp_CurrBase->MSGBASE_FN_NET,Pointers->dp_CurrBase->MSGBASE_FN_NODE,Pointers->dp_CurrBase->MSGBASE_FN_POINT); } sprintf(BUFFER,"27HFidoTag : %-36s27HFidoAddr. : %-36s27H%-48.48s",confbuf,buffer2,clean); SendString(d,BUFFER); if (Pointers->dp_CurrBase->MSGBASE_FN_ORIGIN[0]==0) { strcpy(confbuf,"-"); } else { strcpy(confbuf,Pointers->dp_CurrBase->MSGBASE_FN_ORIGIN); } sprintf(BUFFER,"27HOrigin : %-36s27H%-48.48s27H%-48.48s27H%-48.48s",clean,confbuf,clean,clean); SendString(d,BUFFER); } if (updateme==3) { SendString(d,"H 4) BOARD INFO "); sprintf(BUFFER,"7HBBS Name : %-36s7HSysOp : %-36s7H%-48s7HNode Information%-30s7H~~~~~~~~~~~~~~~~%-30s",Pointers->dp_DayDream->CFG_BOARDNAME,Pointers->dp_DayDream->CFG_SYSOPNAME,clean,clean,clean); SendString(d,BUFFER); sprintf(BUFFER,"7HDTE Rate : %-8ld Node Number : %2d / %2d ",Pointers->dp_Iodev->IOD_DTERATE,(UWORD)Pointers->dp_CurrentNode->ns_Nodenumber,(UWORD)CountNodes(Pointers->dp_NodeStructure)); SendString(d,BUFFER); sprintf(BUFFER,"7HUnit : %-8ld Driver : %-13.13s",Pointers->dp_Iodev->IOD_UNIT,Pointers->dp_Iodev->IOD_NAME); SendString(d,BUFFER); sprintf(confbuf,"%ld secs",Pointers->dp_DayDream->CFG_IDLETIMEOUT); sprintf(BUFFER,"7HTimeout : %-36s 27H%-48s",confbuf,clean); SendString(d,BUFFER); SendString(d,"27HFree Memory 27H~~~~~~~~~~~ 27HChip Fast Total "); lrp=AvailMem(MEMF_CHIP); freefast=AvailMem(MEMF_FAST); sprintf(BUFFER,"27H%-15ld%-16ld%-17ld27H%-48.48s",lrp,freefast,lrp+freefast,clean); SendString(d,BUFFER); sprintf(BUFFER,"27HCurrent Conference: %-28s27H%-48.48s27H%-48.48s",Pointers->dp_CurrConf->CONF_NAME,clean,clean); SendString(d,BUFFER); } } void HandleCAccess(ULONG Access, char * Destbuf) { UWORD i = 0; while (i!=32) { if (Access&(1L<<i)) { Destbuf[i]='X'; } else { Destbuf[i]='_'; } i++; } Destbuf[i]=0; } ULONG CountNodes(struct NodeStruct *Nodet) { struct NodeStruct *Node; ULONG i = 0; UWORD j = 0; Node=Nodet->ns_Next; while (j==0) { i++; if (Node==0) j=1; Node=Node->ns_Next; } return(i); }